//
//  JKPlayerFile.m
//  JKPlayerKit
//
//  Created by 王冲 on 2019/2/11.
//  Copyright © 2019年 JK科技有限公司. All rights reserved.
//

#import "JKPlayerFile.h"
// 本地缓存文件类型的获取
#import <MobileCoreServices/MobileCoreServices.h>

// 下载中的基础路径
#define JKPlayerCachesPathLoading [NSHomeDirectory() stringByAppendingPathComponent:@"/Library/Caches/JKDownLoading"]
// 下载完成的基础路径
#define JKPlayerCachesPathCompleted [NSHomeDirectory() stringByAppendingPathComponent:@"/Library/Caches/JKDownloadCompleted"]

@implementation JKPlayerFile

+(void)load{
    
    [self jk_createFolder:JKPlayerCachesPathCompleted];
    [self jk_createFolder:JKPlayerCachesPathLoading];
}

/**类方法创建文件夹目录 folderNmae:文件夹的名字*/
+(NSString *)jk_createFolder:(NSString *)folderName{
    
    // NSHomeDirectory()：应用程序目录， Caches、Library、Documents目录文件夹下创建文件夹(蓝色的)
    // @"Documents/JKPdf"
    NSString *filePath = [NSString stringWithFormat:@"%@",folderName];
    NSFileManager *fileManager = [NSFileManager defaultManager];
    BOOL isDir = NO;
    // fileExistsAtPath 判断一个文件或目录是否有效，isDirectory判断是否一个目录
    BOOL existed = [fileManager fileExistsAtPath:filePath isDirectory:&isDir];
    
    if ( !(isDir == YES && existed == YES) ) {
        
        // 不存在的路径才会创建
        [fileManager createDirectoryAtPath:filePath withIntermediateDirectories:YES attributes:nil error:nil];
    }
    
    return filePath;
}

/**
   判断文件是否存在
 */
+(BOOL)jk_judgeFileExists:(NSString *)filePath{
    
    // 长度等于0，直接返回不存在
    if (filePath.length == 0) {
        return NO;
    }
    
    NSFileManager *fileManager = [NSFileManager defaultManager];
    NSString *path = [NSString stringWithFormat:@"%@",filePath];
    BOOL isDir = NO;
    // fileExistsAtPath 判断一个文件或目录是否有效，isDirectory判断是否一个目录
    BOOL existed = [fileManager fileExistsAtPath:path isDirectory:&isDir];
    
    if (existed == YES) {
        
        return YES;
    }else{
        // 不存在
        return NO;
    }
    return nil;
}

/**
 下载完成后的路径

 @param url url地址
 @return 返回路径，在 /Library/Caches/JKDownloadCompleted/文件名 里面
 */
+(NSString *)cacheDoneFilePath:(NSURL *)url{
    
    JKLog(@"url=%@",url.lastPathComponent);
    
    NSString *path = [self jk_createFolder:JKPlayerCachesPathCompleted];
    return [path stringByAppendingPathComponent:url.lastPathComponent];
}

/**
 下载中的路径
 
 @param url url地址
 @return 返回路径，在 /Library/Caches/JKDownLoading/文件名 里面
 */
+(NSString *)cacheDoingFilePath:(NSURL *)url{
    
    NSString *path = [self jk_createFolder:JKPlayerCachesPathLoading];
    return [path stringByAppendingPathComponent:url.lastPathComponent];
}

/**
 判断下载中的文件是否存在
 
 @param url 资源的 url
 @return 返回一个BOOL值
 */
+(BOOL)cacheLoadingFileExists:(NSURL *)url{
    
    return [self jk_judgeFileExists:[self cacheDoingFilePath:url]];
}

/**
 判断已经下载好的文件文件是否存在
 
 @param url 资源的 url
 @return 返回一个BOOL值
 */
+(BOOL)cacheCompletedFileExists:(NSURL *)url{
    
    return [self jk_judgeFileExists:[self cacheDoneFilePath:url]];
}

/**
 本地已经缓存好的文件夹缓存文件的大小（下载好的文件大小）
 
 @param url 资源的 url
 @return 返回一个资源文件的大小
 */
+(long long)cacheCompletedFileSize:(NSURL *)url{
    
    // 计算文件总大小
    // 1、先判断是否存在
    if (![self cacheCompletedFileExists:url]) {
        // 如果文件不存在直接返回 0 大小
        return 0;
    }
    // 2、获取文件路径
    NSString *path = [self cacheDoneFilePath:url];
    // 3、计算对应路径下文件的大小
    // 存在计算其大小
    NSDictionary *fileInfo = [[NSFileManager defaultManager]attributesOfItemAtPath:path error:nil];
    
    return [fileInfo[NSFileSize] longLongValue];
}

/**
 临时缓存的文件的大小
 
 @param url 资源的 url
 @return 返回一个资源文件的大小
 */
+(long long)cacheLoadingFileSize:(NSURL *)url{
    
    // 计算文件总大小
    // 1、先判断是否存在
    if (![self cacheLoadingFileExists:url]) {
        // 如果文件不存在直接返回 0 大小
        return 0;
    }
    // 2、获取文件路径
    NSString *path = [self cacheDoingFilePath:url];
    // 3、计算对应路径下文件的大小
    // 存在计算其大小
    NSDictionary *fileInfo = [[NSFileManager defaultManager]attributesOfItemAtPath:path error:nil];
    
    return [fileInfo[NSFileSize] longLongValue];
    
}

/**
 根据本地文件名称获取mimeType
 
 @return 返回一个类型名字
 */

+(NSString *)localContentType:(NSURL *)url{
    
    /**
     用到框架 #import <MobileCoreServices/MobileCoreServices.h>
     kUTTagClassFilenameExtension : 文件扩展名
     CFStringRef contentTypeCF = UTTypeCreatePreferredIdentifierForTag(kUTTagClassFilenameExtension, (__bridge CFStringRef _Nonnull)(fileExtension), NULL);
     */
    
    NSString *path = [self cacheDoneFilePath:url];
    NSString *fileExtension = path.pathExtension;
    
    CFStringRef contentTypeCF = UTTypeCreatePreferredIdentifierForTag(kUTTagClassFilenameExtension, (__bridge CFStringRef _Nonnull)(fileExtension), NULL);
    // 交给ARC管理
    NSString *contentType = CFBridgingRelease(contentTypeCF);
    
    return contentType;
    
}

/**
 移动文件
 
 @param fromPath 移动的文件路径
 @param toPath 移动到的路径
 */
+(void)moveFile:(NSString *)fromPath toPath:(NSString *)toPath{
    
    [[NSFileManager defaultManager] moveItemAtPath:fromPath toPath:toPath error:nil];
    
}

/**
 删除路径
 
 @param filePath 路径
 */
+(void)removeFile:(NSString *)filePath{
    
    if ([self jk_judgeFileExists:filePath]) {
        
         [[NSFileManager defaultManager] removeItemAtPath:filePath error:nil];
    }
}

@end
